//package com.github.aloxc.plugin.restplus.component.listener;
//
//import com.github.aloxc.plugin.restplus.common.Consts;
//import com.github.aloxc.plugin.restplus.common.RequestHelper;
//import com.github.aloxc.plugin.restplus.component.TextPane;
//import com.github.aloxc.plugin.restplus.entity.EnvironmentConfig;
//import com.github.aloxc.plugin.restplus.entity.RestConfig;
//import com.github.aloxc.plugin.restplus.entity.Setting;
//import com.github.aloxc.plugin.restplus.navigator.RestServiceDetail;
//import com.github.aloxc.plugin.restplus.utils.StringUtils;
//import com.github.aloxc.plugin.restplus.utils.ToolkitUtil;
//import com.intellij.openapi.progress.ProgressIndicator;
//import com.intellij.openapi.progress.ProgressManager;
//import com.intellij.openapi.progress.Task;
//import com.intellij.openapi.project.Project;
//import org.jetbrains.annotations.NotNull;
//
//import java.awt.event.ActionEvent;
//import java.awt.event.ActionListener;
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.Map;
//import java.util.Set;
//@GuardSource("cls-aad-aac")
//public class SendActionListener implements ActionListener {
//    private String url;
//    private String method;
//    private TextPane requestParamsTextArea;
//    private TextPane requestBodyTextArea;
//
//    private Project project;
//
//    public SendActionListener(String url, String method, TextPane requestParamsTextArea,TextPane requestBodyTextArea, Project project) {
//        this.url = url;
//        this.method = method;
//        this.requestParamsTextArea = requestParamsTextArea;
//        this.project = project;
//        this.requestBodyTextArea = requestBodyTextArea;
//    }
//
//    @Override
//    public void actionPerformed(ActionEvent e) {
//        ProgressManager.getInstance().run(new Task.Backgroundable(null, "Sending Request") {
//            @Override
//            public void run(@NotNull ProgressIndicator indicator) {
//                final Runnable runnable = () -> {
//                    if (StringUtils.isNullOrEmpty(url)) {
//                        return;
//                    }
//                    String tempUrl = url;
//                    RestConfig config = project.getComponent(RestServicesNavigator.class).getConfig();
//                    EnvironmentConfig environmentConfig = null;
//                    Map<String, Setting> headerMap = new HashMap(2 << 3);
//                    Map<String, Setting> cookieMap = new HashMap(2 << 3);
//
//                    if (config != null && config.getGlobalConfig().getSettingList() != null && config.getGlobalConfig().getSettingList().size() > 0) {
//                        config.getGlobalConfig().getSettingList().stream().filter(ele -> ele.isSelected()).forEach(it -> {
//                            if (Consts.VariateType.HEADER.getType().equals(it.getType())) {
//                                headerMap.put(it.getName(), it);
//                            } else if (Consts.VariateType.COOKIE.getType().equals(it.getType())) {
//                                cookieMap.put(it.getName(), it);
//                            }
//                        });
//                    }
//
//                    if (config != null && config.getEnv() != null && config.getEnv().size() > 0) {
//                        Map<String, EnvironmentConfig> envMap = config.getEnv();
//                        for (String envName : envMap.keySet()) {
//                            if (envMap.get(envName).isSelected()) {
//                                environmentConfig = envMap.get(envName);
//                                if (environmentConfig.getSettingList() != null && environmentConfig.getSettingList().size() > 0) {
//                                    environmentConfig.getSettingList().stream().filter(ele -> ele.isSelected()).forEach(it -> {
//                                        if (Consts.VariateType.HEADER.getType().equals(it.getType())) {
//                                            headerMap.put(it.getName(), it);
//                                        } else if (Consts.VariateType.COOKIE.getType().equals(it.getType())) {
//                                            cookieMap.put(it.getName(), it);
//                                        }
//                                    });
//                                }
//                            }
//                        }
//                    }
//
//                    if (config != null && config.getRequestConfig() != null && config.getRequestConfig().size() > 0 && config.getRequestConfig().get(url) != null && config.getRequestConfig().get(url).getSettingList().size() > 0) {
//                        config.getRequestConfig().get(url).getSettingList().stream().filter(ele -> ele.isSelected()).forEach(it -> {
//                            if (Consts.VariateType.HEADER.getType().equals(it.getType())) {
//                                headerMap.put(it.getName(), it);
//                            } else if (Consts.VariateType.COOKIE.getType().equals(it.getType())) {
//                                cookieMap.put(it.getName(), it);
//                            }
//                        });
//                    }
//
//                    if (requestParamsTextArea != null) {
//                        String requestParamsText = requestParamsTextArea.getText();
//                        Map<String, Object> paramMap = ToolkitUtil.textToParamMap(requestParamsText);
//                        Set<String> usedKeySet = new HashSet<>(2 << 3);
//                        if (paramMap != null && paramMap.size() > 0) {
//                            // set PathVariable value to request URI
//                            String prev = tempUrl;
//                            for (String key : paramMap.keySet()) {
//                                tempUrl = tempUrl.replaceFirst("\\{(" + key + "[\\s\\S]*?)\\}", String.valueOf(paramMap.get(key)));
//                                if (!prev.equals(tempUrl)) {
//                                    usedKeySet.add(key);
//                                }
//                                prev = tempUrl;
//                            }
//                        }
//                        usedKeySet.stream().forEach(k -> paramMap.remove(k));
//                        String params = ToolkitUtil.textToRequestParam(paramMap);
//                        if (params.length() != 0) {
//                            // 包含了参数
//                            if (tempUrl.contains("?")) {
//                                tempUrl += "&" + params;
//                            } else {
//                                tempUrl += "?" + params;
//                            }
//                        }
//                    }
//
//                    // 完整url
//                    String responseText = tempUrl;
//                    boolean https = environmentConfig.isHttps();
//                    String context = environmentConfig.getContext();
//                    if (!StringUtils.isNullOrEmpty(context)) {
//                        if (context.startsWith("/")) {
//                            context = context.substring(1);
//                        }
//                        if (context.endsWith("/")) {
//                            context = context.substring(0, context.length() - 1);
//                        }
//                    } else {
//                        context = "";
//                    }
//                    tempUrl = (https ? "https://" : "http://") + environmentConfig.getHost() + ":" + environmentConfig.getPort() + "/" + context + tempUrl;
//                    String response;
//                    if ("POST".equals(method.toUpperCase())) {
//                        if (requestBodyTextArea != null && !StringUtils.isNullOrEmpty(requestBodyTextArea.getText()) && !"null".equals(requestBodyTextArea.getText())) {
//                            response = RequestHelper.postRequestBodyWithJson(tempUrl, requestBodyTextArea.getText(), headerMap.values(), cookieMap.values(),project);
//                        } else {
//                            response = RequestHelper.request(tempUrl, method, headerMap.values(), cookieMap.values(),project);
//                        }
//                    } else {
//                        response = RequestHelper.request(tempUrl, method, headerMap.values(), cookieMap.values(),project);
//                    }
//
//                       /* else if (method.equalsIgnoreCase("post")) {
////                response = HttpClientHelper.post(url);
//                            response = RequestHelper.post(url);
//                        } else {
//                            response = RequestHelper.get(url);
//                        }*/
//
//                    if (response != null) {
//                        responseText = response;
//                    }
//
//                    RestServiceDetail.addResponseTabPanel(responseText);
//
//                };
//                runnable.run();
//            }
//        });
//    }
//
//    public void send() {
//        this.actionPerformed(null);
//    }
//}